// 调用cb来创建db请求
const { boolean } = require('joi')
const cb = require('../promise/cb')
const bcrypt = require('bcryptjs')
    // 获取manager的数据
exports.GetManager = async(req, res) => {
    // 定义返回的数据
    var resdata = {}

    // 获取查询的关键字
    const key = req.query.query

    // 获取请求的页数
    const pagenum = parseInt(req.query.pagenum)

    // 获取请求页面的数据条数
    const pagesize = parseInt(req.query.pagesize)

    // 定义查询数据的总条数的语句
    sql = 'select count(*) as count from sp_manager'

    // 如果用户有输入关键字
    if (key) {
        sql += ' where mg_name like ?'
        mtotal = await cb(sql, ["%" + key + "%"]).catch(function(err) {
            res.ResInfo(err)
        })
    }
    // 如果用户没有输入关键字
    else {
        mtotal = await cb(sql).catch(function(err) {
            res.ResInfo(err)
        })
    }
    // 定义查询的数据的总条数
    var total = mtotal[0]["count"]

    resdata.total = total

    // 计算查询的数据位置 并判断是否超出总数据
    const offset = (pagenum - 1) * pagesize
    if (offset > total) offset = total

    // 定义查询管理员相关信息的语句
    sql = 'SELECT * FROM sp_manager as smg LEFT JOIN sp_role as srl ON smg.role_id = srl.role_id'

    // 如果用户输入关键字
    if (key) {
        sql += ' where smg.mg_name like ? limit ?,?'
        managerInfo = await cb(sql, ["%" + key + "%", offset, pagesize]).catch(function(err) {
            res.ResInfo(err)
        })
    } else {
        sql += ' limit ?,?'
        managerInfo = await cb(sql, [offset, pagesize]).catch(function(err) {
            res.ResInfo(err)
        })
    }
    retManager = []
    for (idx in managerInfo) {
        manager = managerInfo[idx]

        var role_name = manager.role_name

        // role_id为0的是超级管理员
        if (!manager.role_id) {
            role_name = "超级管理员"
        }
        retManager.push({
            "id": manager.mg_id,
            "username": manager.mg_name,
            "role_name": role_name,
            "mobile": manager.mg_mobile,
            "mg_state": Boolean(manager.mg_state),
            "email": manager.mg_email,
            "create_time": manager.mg_time
        })
    }
    // console.log(retManager);
    resdata.users = retManager
        // resdata.
    res.ResInfo('获取用户数据成功', 200, resdata)
}

// 更改manager的状态
exports.ChangeManagerState = async(req, res) => {
    // 获得的数据
    const params = req.params
    state = params.state === "false" ? 0 : 1

    // 查询返回数据所属的管理员
    sql = 'update sp_manager set mg_state=? where mg_id=?'
    const results = await cb(sql, [state, params.id]).catch(function(err) {
        res.ResInfo(err)
    })

    // console.log(results)
    if (results.changedRows == 1) {
        // 通过id获取对应manager数据
        sql = 'select * from sp_manager where mg_id=?'
        const data = await cb(sql, params.id).catch(function(err) {
            res.ResInfo(err)
        })
        const resdata = {
            "id": data.mg_id,
            "username": data.mg_name,
            "role_name": data.role_name,
            "mobile": data.mg_mobile,
            "mg_state": Boolean(data.mg_state),
            "email": data.mg_email,
            "create_time": data.mg_time
        }
        res.ResInfo("设置状态成功", 200, resdata)
    }

}

exports.Create = async function(req, res) {
    var mg_name = req.body.username
    var mg_pwd = bcrypt.hashSync(req.body.password, 10); //把明文密码转换为编码密码
    var mg_email = req.body.email
    var mg_mobile = req.body.mobile
    var mg_time = (Date.parse(new Date()) / 1000) //把当前系统时间转换为时间戳
        //先根据用户名进行查询用户，如果存在用户则添加失败
    var sql = "select * from sp_manager where mg_name=?"
    var resualt = await cb(sql, mg_name).catch(function(err) {
            res.ResInfo(err)
        })
        // console.log(resualt);
    if (resualt.length > 0) {
        return res.ResInfo("用户名存在")
    }

    //用户名不存在，则插入数据
    sql = "insert into sp_manager (mg_name,mg_pwd,mg_time,mg_mobile,mg_email) values(?,?,?,?,?)"
    var resualt = await cb(sql, [mg_name, mg_pwd, mg_time, mg_mobile, mg_email]).catch(function(err) {
        res.ResInfo(err)
    })

    res.ResInfo("添加用户成功", 200, {
        "username": mg_name,
        "mobile": mg_mobile,
        "email": mg_email,
        "create_time": mg_time
    })
}

exports.Update = async function(req, res) {
    var id = parseInt(req.params.id)
    var mg_mobile = req.body.mobile
    var mg_email = req.body.email
        // var mg_name = req.body.username
        // var mg_pwd = bcrypt.hashSync(req.body.password, 10); //把明文密码转换为编码密码
        // var mg_time = (Date.parse(new Date()) / 1000) //把当前系统时间转换为时间戳
    sql = "UPDATE sp_manager SET mg_mobile=?,mg_email=?  WHERE mg_id=?  "
    var resualt = await cb(sql, [mg_mobile, mg_email, id]).catch(function(err) {
        res.ResInfo(err)
    })

    res.ResInfo("数据更新成功", 200)
}